package com.mew.chess.core.game.bjl.game.core;

import com.mew.chess.core.game.bjl.game.BjlRoomManager;
import com.mew.chess.core.game.bjl.game.common.BjlResultBO;
import com.mew.chess.core.game.bjl.game.message.PushOpenCardMessage;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author dylin
 * @create 2021/4/25
 */
@Data
public class BjlCardDevice {
    /**
     * 发牌
     * @return
     */
    public static void dealCard(BjlRoomManager roomManager){
        List<Integer> cardLib = roomManager.getCardLib();
        BjlResultBO bjlResult = roomManager.getBjlResult();
        bjlResult.setBankerCards(generateCard(cardLib));
        bjlResult.setIdleCards(generateCard(roomManager.getCardLib()));
        boolean iMajor = BjlCardUtil.isMajor(bjlResult.getBankerCards());
        boolean bMajor = BjlCardUtil.isMajor(bjlResult.getIdleCards());
        if(!iMajor && !bMajor){
            int idleBC=isIdleNeedFill(roomManager.getCardLib(),bjlResult.getIdleCards());
            isBankerNeedFill(cardLib,bjlResult.getBankerCards(),idleBC);
        }
    }
    /**
     * 生成两张牌
     * @param cardLib 牌库
     * @return
     */
    private static List<Integer> generateCard(List<Integer> cardLib){
        List<Integer> tempList=new ArrayList<>(cardLib.subList(0,2));
        cardLib.remove(0);
        cardLib.remove(0);
        return tempList;
    }
    /**
     * 生成一张牌
     * @param cardLib
     * @return
     */
    private static Integer generateOneCard(List<Integer> cardLib){
        Integer tempCard=cardLib.get(0);
        cardLib.remove(0);
        return tempCard;
    }

    /**
     * 闲家是否需要博牌
     * @param cardLib
     */
    private static int isIdleNeedFill(List<Integer> cardLib,List<Integer> idleCards){
        int val=BjlCardUtil.computeCardsVal(idleCards);
        //闲家首发两张牌的点数合计--小于或者等于5（即0、1、2、3、4、 5点），闲家博牌
        if(val<6){
            Integer card=generateOneCard(cardLib);
            idleCards.add(card);
            return BjlCardUtil.computeCardVal(card);
        }
        return 0;
    }
    /**
     * 庄家是否需要博牌
     * @param cardLib 牌库
     * @return
     */
    private static void isBankerNeedFill(List<Integer> cardLib,List<Integer> bankerCards,int  idleHardVal){
        int bankerVal=BjlCardUtil.computeCardsVal(bankerCards);
        //庄家首发两张牌的点数合计--小于或等于2（即0、1、2点），庄家博牌
        if(bankerVal<3){
            bankerCards.add(generateOneCard(cardLib));
            return;
        }
        //庄家首发两张牌的点数合计--等于3且闲家第三张牌不为：8，庄家博牌
        if(bankerVal==3&&idleHardVal!=8){
            bankerCards.add(generateOneCard(cardLib));
            return;
        }
        //庄家首发两张牌的点数合计--等于4且闲家第三张牌不为：0、1、8、9，庄家博牌
        if(bankerVal==4&&idleHardVal>1&&idleHardVal<8){
            bankerCards.add(generateOneCard(cardLib));
            return;
        }
        //庄家首发两张牌的点数合计--等于5且闲家第三张牌不为：0、1、2、3、8、9，庄家博牌
        if(bankerVal==5&&idleHardVal>3&&idleHardVal<8){
            bankerCards.add(generateOneCard(cardLib));
            return;
        }
        //庄家首发两张牌的点数合计--等于6且闲家第三张牌为：6、7，庄家博牌
        if(bankerVal==6&&(idleHardVal==6||idleHardVal==7)){
            bankerCards.add(generateOneCard(cardLib));
        }
    }
}
